package org.jeecg.modules.coursearrangeatom.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.coucoursearrange.entity.CouCourseArrange;
import org.jeecg.modules.coursearrangeatom.entity.CouCourseArrangeAtom;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.coursearrangeatom.vo.CouCourseArrangeAtomAllProVo;
import org.jeecg.modules.coursearrangeatom.vo.CouCourseArrangeAtomVo;
import org.jeecg.modules.coursearrangeatom.vo.CouCourseArrangeOneTableVo;
import org.jeecg.modules.coursearrangeatom.vo.ViewCouCourseArrAtomVo;
import org.jeecg.modules.courseschetemplate.entity.CouCoursescheduleTemplate;

/**
 * @Description: cou_course_arrange_atom
 * @author: baochangrong
 * @Date:   2022-02-23
 * @Version: V1.0
 */
public interface CouCourseArrangeAtomMapper extends BaseMapper<CouCourseArrangeAtom> {

    /**课表班级数据查询 */
    List<CouCourseArrangeAtom> getClassDataList(String courseArrangeId,String targetObjId,Integer relObjTtype);
    /**课表教室（场地）数据查询 */
    List<CouCourseArrangeAtom> getClassRoomDataList(String courseArrangeId,String targetObjId,Integer relObjTtype);
    /**课表教师数据查询 */
    List<CouCourseArrangeAtom> getTeacherDataList(String courseArrangeId,String targetObjId,Integer relObjTtype,String selectTeacherIds);
    /**课表科目数据查询 */
    List<CouCourseArrangeAtom> getCourseDataList(String courseArrangeId,String targetObjId,Integer relObjTtype);

    /**
     * 冲突检测页 教师个人课表
     */
    List<CouCourseArrangeAtomVo> getArrangeAtomByObjId(@Param("couCourseArrangeAtomVo") CouCourseArrangeAtomVo couCourseArrangeAtomVo,@Param("checkContradiction") int checkContradiction);
    /**
     * 取出节次最大的某个课表
     */
    List<CouCourseArrangeAtom> getArrangeAtomMaxCourse(String courseArrangeId);
    //查询教师所带的班级对应的科目id(参数：班级、课表、节次、周次)
    CouCourseArrangeAtom classCourseSubjectId(String tClassId,String tCourseArrangeId,Integer tWeek,Integer tSection);


    /**
     * 通过视图 ===
     * 课表详情查询 listByCourseArrangeId
     */
    List<ViewCouCourseArrAtomVo> listByCourseArrangeId(@Param("viewCouCourseArrAtomVo") ViewCouCourseArrAtomVo viewCouCourseArrAtomVo,@Param("queryParam") Map<String,String> queryParam);

    /* 全校全年级1张课表：查询同一时间上课的班级、老师、教室、科目,显示在1节课的位置
     * 需求：查询全校同时在上体育课的班级数量，判断操场是否够用，查询同时在上语文课的老师找到最少课的时间开展教研活动或开学科会议
     * 扩展需求：查询某教室同时使用的班级数量，查询某老师同时上课的班级数量
     * 查询单科全校课表：查询全年级的语文课、查询全年级的体育课，得到1张课表
     * 查询全校课表：查询全年级没课的班级、查询全年级在上体育课的班级，得到1张课表
     *  */
    List<CouCourseArrangeOneTableVo> queryCouArrangeAtomByObjectType(@Param("couCourseArrangeAtomAllProVo")CouCourseArrangeAtomAllProVo couCourseArrangeAtomAllProVo,@Param("queryParam") Map<String,String> queryParam);

    /**
     * 查询全校各班级课表：查询各个班级的课表，得到N个班级的N张课表
     * @return
     */
    List<CouCourseArrangeAtomAllProVo> queryCouArrangeAtomByGradeIdsOrClassIds(@Param("couCourseArrangeAtomAllProVo") CouCourseArrangeAtomAllProVo couCourseArrangeAtomAllProVo,@Param("queryParam") Map<String,String> queryParam);
    List<CouCourseArrangeAtom> getNewCouCourseArrangeAtomByCourscheTemplate(@Param("coursescheduleTemplateId") String coursescheduleTemplateId);
    List<CouCourseArrangeAtom> getNewCouCourseArrangeAtomByCouCourseArrange(@Param("couCourseArrange") CouCourseArrange couCourseArrange);

    List<CouCourseArrangeAtom> getNewTeacherByCouCourseArrange(@Param("couCourseArrange")CouCourseArrange couCourseArrange);
    List<CouCourseArrangeAtom> getNewClassroomByCouCourseArrange(@Param("couCourseArrange")CouCourseArrange couCourseArrange);
}
